
# 绝对路径
#   从最外层元素到指定元素之间所有经过的元素层级的路径 （层级关系依赖强，不建议使用）
#   写法：/html根节点开始，使用/来分隔元素层级。例
#   如： /html/body/div/fieldset/form/p[1]/input

# 相对路径
#   从目标定位元素的任意层级的上级元素开始到目标元素所经过的层级的路径
#   写法：以 // 开始，后续每个层级都使用 / 来分隔。例如： //p[3]/input

# 路径+属性定位
#   利用元素的属性来定位
#   写法： //标签名[@属性名="属性值"] 或者 //*[@属性名="属性值"]
#   //*[@属性名1="属性值" and @属性名2=属性值]
#   注意事项：标签名可以使用 * 来代替任意
#   driver.find_element(By.XPATH,"//input[@name='userA']").send_keys("admin")

# 属性和逻辑结合
#   利用元素的多个属性来进行定位
#   写法： //*[@属性名="属性值" and @属性名="属性值"]
#   driver.find_element(By.XPATH,"//*[@type='button' and @value='prompt']").click()

# 层级和属性结合
#   先定位到其父级元素，然后再找到该元素
#   写法： //标签名[@属性名="属性值"]/标签名[@属性名="属性值"]
#   driver.find_element(By.XPATH,"//p[@id='pa']/input[@type='text']").send_keys("admin")

# 利用元素文本定位
#   写法： //*[text()="文本"]
#   driver.find_element(by=By.XPATH, value="//*[text()='百度']").click()

# 利用局部属性值定位
#   写法： //*[contains(@属性名,"局部属性值")]
#   driver.find_element(By.XPATH, "//*[contains(@placeholder,'用户名')]").send_keys("admin")

# 1.导包（快捷键：alt + enter）
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

driver = webdriver.Edge()
# 3.输入网址
driver.get("http://121.43.169.97:8848/pageA.html")
# 4.页面操作
# 属性定位：建议选择具有唯一性的属性
driver.find_element(By.XPATH,"//input[@name='userA']").send_keys("admin")
driver.find_element(By.XPATH,"//*[@id='passwordA']").send_keys("123456")
# 属性和逻辑结合
driver.find_element(By.XPATH,"//*[@type='button' and @value='prompt']").click()
# 5.等待2秒
time.sleep(10)
# 6.退出浏览器
driver.quit()